const fs = require('fs');
const { exec } = require('child_process');
const path = require('path');


/**
 * 使用系统默认程序打开图片
 * @param {string} filePath - 图片文件路径
 */
function openImageFile(filePath) {
  try {
    let command;
    
    switch (process.platform) {
      case 'darwin': // macOS
        command = `open "${filePath}"`;
        break;
      case 'win32': // Windows
        command = `start "" "${filePath}"`;
        break;
      default: // Linux和其他系统
        command = `xdg-open "${filePath}"`;
    }
    
    exec(command, (error) => {
      if (error) {
        console.error('无法自动打开图片:', error.message);
      } else {
      }
    });
  } catch (error) {
    console.error('打开图片时出错:', error.message);
  }
}

/**
 * 保存Base64图片并自动打开
 * @param {string} base64Data - Base64编码的图片数据
 * @param {object} options - 配置选项
 * @param {string} [options.savePath=process.cwd()] - 保存路径（默认为当前目录）
 * @param {string} [options.filename=`image_${Date.now()}.png`] - 保存文件名
 * @param {boolean} [options.open=true] - 是否自动打开图片
 */
function saveAndOpenBase64Image(base64Data, options = {}) {
  const defaultOptions = {
    savePath: process.cwd(),
    filename: `image_${Date.now()}.png`,
    open: true
  };
  
  const mergedOptions = { ...defaultOptions, ...options };
  
  try {
    // 提取纯Base64数据
    const base64Image = base64Data.replace(/^data:image\/\w+;base64,/, '');
    
    // 确保保存目录存在
    if (!fs.existsSync(mergedOptions.savePath)) {
      fs.mkdirSync(mergedOptions.savePath, { recursive: true });
    }
    
    // 完整文件路径
    const filePath = path.join(mergedOptions.savePath, mergedOptions.filename);
    
    // 保存为图片文件
    fs.writeFileSync(filePath, base64Image, 'base64');
    console.log(`图片已保存到: ${filePath}`);
    
    // 自动打开图片
    if (mergedOptions.open) {
      openImageFile(filePath);
    }
    
    return filePath;
  } catch (error) {
    console.error('处理图片时出错:', error.message);
    throw error;
  }
}





module.exports = { saveAndOpenBase64Image, openImageFile };
